home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1999 #2 / Amiga Plus CD - 1999 - No. 2.iso / System-Boost / Workbench / Archive / XPK / xpk_Source / xpkmaster / fib.c < prev    next >
C/C++ Source or Header  |  1998-11-15  |  2KB  |  75 lines

  1. #ifndef XPKMASTER_FIB_C
  2. #define XPKMASTER_FIB_C
  3.  
  4. /* Routinesheader
  5.  
  6.     Name:        fib.c
  7.     Main:        xpkmaster
  8.     Versionstring:    $VER: fib.c 1.3 (30.10.1998)
  9.     Author:        SDI
  10.     Distribution:    Freeware
  11.     Description:    FIB related routines
  12.  
  13.  1.0   05.10.96 : first real version
  14.  1.1   20.12.97 : code cleanup
  15.  1.2   09.01.98 : added XPK_ALLINONE
  16.  1.3   30.10.98 : added getUClen and fixed updatefib a bit
  17. */
  18.  
  19. #include <proto/exec.h>
  20. #include <proto/dos.h>
  21. #include <exec/types.h>
  22. #include "xpkmaster.h"
  23.  
  24. XPK_ALLINONE void getUClen(struct XpkBuffer *xbuf, LONG *ulen, LONG *clen)
  25. {
  26.   if(xbuf->xb_Headers.h_Glob.xsh_Flags & XPKSTREAMF_LONGHEADERS)
  27.   {
  28.     *ulen = xbuf->xb_Headers.h_Loc.xch_Long.xchl_ULen;
  29.     *clen = xbuf->xb_Headers.h_Loc.xch_Long.xchl_CLen;
  30.   }
  31.   else
  32.   {
  33.     *ulen = xbuf->xb_Headers.h_Loc.xch_Word.xchw_ULen;
  34.     *clen = xbuf->xb_Headers.h_Loc.xch_Word.xchw_CLen;
  35.   }
  36. }
  37.  
  38. XPK_ALLINONE LONG updatefib(struct XpkBuffer *xbuf)
  39. {
  40.   struct XpkStreamHeader *globhdr = &xbuf->xb_Headers.h_Glob;
  41.   struct XpkFib *fib = &xbuf->xb_Fib;
  42.   LONG ulen, clen;
  43.  
  44.   getUClen(xbuf, &ulen, &clen);
  45.  
  46.   fib->xf_Type = XPKTYPE_PACKED;
  47.   fib->xf_CLen = globhdr->xsh_CLen + 8;
  48.   fib->xf_ULen = globhdr->xsh_ULen;
  49.   fib->xf_NLen = ulen + XPK_MARGIN;
  50.   fib->xf_CCur = xbuf->xb_CCur;
  51.   fib->xf_UCur = xbuf->xb_UCur;
  52.   xbuf->xb_CCur += ROUNDLONG (clen) + xbuf->xb_Headers.h_LocSize;
  53.   xbuf->xb_UCur += ulen;
  54.   fib->xf_ID = globhdr->xsh_Type;
  55.   fib->xf_SubVersion = globhdr->xsh_SubVrs;
  56.   fib->xf_MasVersion = globhdr->xsh_MasVrs;
  57.   CopyMem(globhdr->xsh_Initial, fib->xf_Head, 16);
  58.  
  59.   percentages(fib);
  60.   return addseek(xbuf);
  61. }
  62.  
  63. XPK_ALLINONE void percentages (struct XpkFib *fib)
  64. {
  65.   fib->xf_Ratio = 0;
  66.   if(fib->xf_ULen)
  67.     fib->xf_Ratio = 100 - 100 * fib->xf_CLen / fib->xf_ULen;
  68.   if(fib->xf_Ratio < 0)
  69.     fib->xf_Ratio = 0;
  70.   *(LONG *) fib->xf_Packer = fib->xf_ID;
  71.   fib->xf_Packer[4] = 0;
  72. }
  73.  
  74. #endif /* XPKMASTER_FIB_C */
  75.